// DMEnumerationWrappers.h

#pragma once

#include "dmalgointerfaces.h"

namespace Microsoft
{
namespace SqlServer
{
namespace DataMining
{
namespace PluginAlgorithms
{
    public   ref class MiningViewerType sealed 
    {
    public:
		[System::Diagnostics::CodeAnalysis::SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible")]
        static String ^   MicrosoftTree               =   DM_VIEWERTYPE_MICROSOFT_TREE;
        [System::Diagnostics::CodeAnalysis::SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible")]
		static String ^   MicrosoftCluster            =   DM_VIEWERTYPE_MICROSOFT_CLUSTER;
        [System::Diagnostics::CodeAnalysis::SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible")]
		static String ^   MicrosoftSequenceCluster    =   DM_VIEWERTYPE_MICROSOFT_SEQUENCE_CLUSTER;
        [System::Diagnostics::CodeAnalysis::SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible")]
		static String ^   MicrosoftTimeSeries         =   DM_VIEWERTYPE_MICROSOFT_TIME_SERIES;
        [System::Diagnostics::CodeAnalysis::SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible")]
		static String ^   MicrosoftNaiveBayesian      =   DM_VIEWERTYPE_MICROSOFT_NAIVEBAYESIAN;
        [System::Diagnostics::CodeAnalysis::SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible")]
		static String ^   MicrosoftAssociationRules   =   DM_VIEWERTYPE_MICROSOFT_ASSOCIATION_RULES;
        [System::Diagnostics::CodeAnalysis::SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible")]
		static String ^   MicrosoftNeuralNetwork      =   DM_VIEWERTYPE_MICROSOFT_NEURAL_NETWORK;
    public:


    };

    public enum class  PlugInServiceType
    {
        ServiceTypeOther, 
        ServiceTypeClassification,
	    ServiceTypeClustering,
	    ServiceTypeAssociation,
	    ServiceTypeDensityEstimate,
	    ServiceTypeSequence,
    };


    // wraps dmalgo.h::DM_MiningColumnContent
    public enum class MiningColumnContent
    {	
        None			=	0,
		Discrete        =   DM_MININGCOLUMN_CONTENT_DISCRETE,
	    Continuous      =   DM_MININGCOLUMN_CONTENT_CONTINUOUS,
	    Discretized     =   DM_MININGCOLUMN_CONTENT_DISCRETIZED,
	    SequenceTime    =   DM_MININGCOLUMN_CONTENT_SEQUENCETIME,
	    Ordered         =   DM_MININGCOLUMN_CONTENT_ORDERED,
	    Cyclical        =   DM_MININGCOLUMN_CONTENT_CYCLICAL,
	    NestedTable     =   DM_MININGCOLUMN_CONTENT_NESTEDTABLE,
	    Key             =   DM_MININGCOLUMN_CONTENT_KEY,
	    KeySequence     =   DM_MININGCOLUMN_CONTENT_KEY_SEQUENCE,
	    KeyTime         =   DM_MININGCOLUMN_CONTENT_KEY_TIME,
	    Probability     =   DM_MININGCOLUMN_CONTENT_PROBABILITY,
	    Variance        =   DM_MININGCOLUMN_CONTENT_VARIANCE,
	    StdDev          =   DM_MININGCOLUMN_CONTENT_STDDEV,
	    Support         =   DM_MININGCOLUMN_CONTENT_SUPPORT,
	    ProbabilityVariance =   DM_MININGCOLUMN_CONTENT_PROBABILITYVARIANCE,
	    ProbabilityStdDev   =   DM_MININGCOLUMN_CONTENT_PROBABILITYSTDDEV
    } ;


    // wraps dmalgo.h::DM_MODELING_FLAG_ENUM
    public enum class MiningModelingFlag
    {
        Invalid     =   DM_MODELING_FLAG_INVALID,
        Null        =   DM_MODELING_FLAG_NULL,
        Binary      =   DM_MODELING_FLAG_BINARY,
        NotNull     =   DM_MODELING_FLAG_NOT_NULL,
        [System::Diagnostics::CodeAnalysis::SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
		Regressor   =   DM_MODELING_FLAG_REGRESSOR,
        CustomBase  =   DM_MODELING_FLAG_CUSTOM_BASE,
    };



    // wraps oledbdm.h::DM_MiningServiceTrainingComplexity
    public enum class MiningTrainingComplexity
    {
        Low     =   DM_TRAINING_COMPLEXITY_LOW,
        Medium  =   DM_TRAINING_COMPLEXITY_MEDIUM, 
        High    =   DM_TRAINING_COMPLEXITY_HIGH, 
    };

    // wraps oledbdm.h::DM_MiningServicePredictionComplexity
    public enum class MiningPredictionComplexity
    {
        Low     =   DM_PREDICTION_COMPLEXITY_LOW,
        Medium  =   DM_PREDICTION_COMPLEXITY_MEDIUM,
        High    =   DM_PREDICTION_COMPLEXITY_HIGH,
    };

    // wraps oledbdm.h::DM_MiningServiceExpectedQuality
    public enum class MiningExpectedQuality
    {
        Low     =   DM_EXPECTED_QUALITY_LOW,
        Medium  =   DM_EXPECTED_QUALITY_MEDIUM,
        High    =   DM_EXPECTED_QUALITY_HIGH,
    };

    // wraps oledbdm.h::DM_MiningServiceScaling
    public enum class MiningScaling
    {
        Low     =   DM_SCALING_LOW,
        Medium  =   DM_SCALING_MEDIUM,
        High    =   DM_SCALING_HIGH,
    };


    // wraps dmalgo.h::DM_SUPPORTED_FUNCTION_ENUM
    public enum class SupportedFunction
    {	
        Invalid =   DMSF_INVALID,
	    PredictScalar  =   DMSF_Predict_Scalar,
	    PredictTable   =   DMSF_Predict_Table	,
	    PredictAssociation  =   DMSF_PredictAssociation	,
	    PredictSequence =   DMSF_PredictSequence	,
	    PredictTimeSeries   =   DMSF_PredictTimeSeries	,
	    PredictSupport  =   DMSF_PredictSupport	,
	    PredictVariance =   DMSF_PredictVariance	,
	    PredictStdDev    =   DMSF_PredictStdev	,
	    PredictProbability =   DMSF_PredictProbablility	,
	    PredictAdjustedProbability  =   DMSF_PredictAdjustedProbability	,
	    Cluster =   DMSF_Cluster	,
	    ClusterDistance =   DMSF_ClusterDistance	,
	    ClusterProbability  =   DMSF_ClusterProbability	,
	    PredictHistogram    =   DMSF_PredictHistogram	,
	    ClusterPredictHistogram =   DMSF_ClusterPredictHistogram	,
	    TopCount    =   DMSF_TopCount	,
	    BottomCount =   DMSF_BottomCount	,
	    TopSum  =   DMSF_TopSum	,
	    BottomSum   =   DMSF_BottomSum	,
	    TopPercent  =   DMSF_TopPercent	,
	    BottomPercent   =   DMSF_BottomPercent	,
	    RangeMid    =   DMSF_RangeMid	,
	    RangeMin    =   DMSF_RangeMin	,
	    RangeMax    =   DMSF_RangeMax	,
	    PredictNodeId   =   DMSF_PredictNodeId	,
	    IsInNode    =   DMSF_IsInNode	,
	    IsDescendent    =   DMSF_IsDescendent	,
	    DCluster    =   DMSF_DCluster	,
	    DProbability    =   DMSF_DProbability	,
	    DAdjustedProbability    =   DMSF_DAdjustedProbability	,
	    DStdDev  =   DMSF_DStdev	,
	    DSupport    =   DMSF_DSupport	,
	    DVariance   =   DMSF_DVariance	,
	    DNodeId =   DMSF_DNodeId	,
	    DSequence   =   DMSF_DSequence	,
	    DTime   =   DMSF_DTime	,
	    DDistance   =   DMSF_DDistance	,
	    Lag =   DMSF_Lag	,
	    PredictCaseLikelihood  =   DMSF_PredictCaseLikelihood	,
	    CustomFunctionBase    =   DMSF_CUSTOM_FUNCTION_BASE
    } ;
    // wraps dmalgo.h::DMMarginalRequirementsEnum
    [FlagsAttribute]
	public enum class MarginalRequirements
    {	
        None                =   DMMR_NONE,
	    InputStats          =   DMMR_INPUT_STATS,
        OutputStats         =   DMMR_OUTPUT_STATS,
	    AllStats            =   DMMR_ALL_STATS,
    } ;


    // wraps dmalgo.h::DM_ATTRIBUTE_FLAGS
    [FlagsAttribute]
	[System::Diagnostics::CodeAnalysis::SuppressMessage("Microsoft.Naming", "CA1711:IdentifiersShouldNotHaveIncorrectSuffix")]
	public enum class AttributeFlags
    {
        None		=	0,
		Continuous  =   DMAF_CONTINUOUS,
        Discrete    =   DMAF_DISCRETE,
        Binary      =   DMAF_BINARY,
        Normal      =   DMAF_NORMAL,
        Uniform     =   DMAF_UNIFORM,
        Ordered     =   DMAF_ORDERED,
        Cyclical    =   DMAF_CYCLICAL,
        Discretized =   DMAF_DISCRETIZED,
        Input       =   DMAF_INPUT,
        Output      =   DMAF_OUTPUT,
        Case        =   DMAF_CASE,
        Sequence    =   DMAF_SEQUENCE,
        Time        =   DMAF_TIME,
        [System::Diagnostics::CodeAnalysis::SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")]
		Regressor   =   DMAF_REGRESSOR,
        Probability =	DMAF_PROBABILITY,
        Support 	=	DMAF_SUPPORT,
        ProbabilityVariance	=	DMAF_PROBABILITY_VARIANCE,
        ProbabilityStdDev		=	DMAF_PROBABILITY_STDDEV,
        Variance	=	DMAF_VARIANCE,
        StdDev		=	DMAF_STDDEV,
        Custom      =   DMAF_CUSTOM
    };


	// wraps oledbdm.h::DM_NODE_TYPE...
    public enum class NodeType
	{
		None							=	0,
		Model							=	DM_NODE_TYPE_MODEL,
		Tree							=	DM_NODE_TYPE_CLASSIFICATION_TREE_ROOT,
		Interior						=	DM_NODE_TYPE_TREE_INTERIOR,
		Distribution					=	DM_NODE_TYPE_TREE_DISTRIBUTION,
		Cluster							=	DM_NODE_TYPE_CLUSTER,
		Unknown							=	DM_NODE_TYPE_UNKNOWN,
		ItemSet							=	DM_NODE_TYPE_ITEMSET,
		AssociationRule					=	DM_NODE_TYPE_ASSOCIATION_RULE,
		PredictableAttribute			=	DM_NODE_TYPE_NB_PREDICTABLE_ATTRIBUTE,
		InputAttribute					=	DM_NODE_TYPE_NB_INPUT_ATTRIBUTE,
		InputAttributeState				=	DM_NODE_TYPE_NB_INPUT_ATTRIBUTE_STATE,
		Sequence						=	DM_NODE_TYPE_SEQUENCE,
		Transition						=	DM_NODE_TYPE_TRANSITION,
		TimeSeries						=	DM_NODE_TYPE_TIME_SERIES,
		TSTree							=	DM_NODE_TYPE_TS_TREE,
		NNetSubNetwork					=	DM_NODE_TYPE_NN_SUBNETWORK,
		NNetInputLayer					=	DM_NODE_TYPE_NN_INPUT_LAYER,
		NNetHiddenLayer					=	DM_NODE_TYPE_NN_HIDDEN_LAYER,
		NNetOutputLayer					=	DM_NODE_TYPE_NN_OUTPUT_LAYER,
		NNetInputNode					=	DM_NODE_TYPE_NN_INPUT_NODE,
		NNetHiddenNode					=	DM_NODE_TYPE_NN_HIDDEN_NODE,
		NNetOutputNode					=	DM_NODE_TYPE_NN_OUTPUT_NODE,
		NNetMarginalNode				=	DM_NODE_TYPE_NN_MARGINAL_STAT_NODE,
		RegressionTreeRoot				=	DM_NODE_TYPE_REGRESSION_TREE_ROOT,
		NaiveBayesMarginalStatNode		=	DM_NODE_TYPE_NB_MARGINAL_STAT_NODE,
		CustomBase						=	DM_NODE_TYPE_CUSTOM_BASE
	};

	// wraps dmalgo.h::DM_NODE_PROP_ENUM...
    public enum class NodeProperty
	{
		None			=	0,
		//Attributes	=	DMNP_ATTRIBUTES,	-- wrapped in a special function
		//Type			=	DMNP_TYPE,			-- wrapped in a special function
		ConditionXml	=	DMNP_CONDITION_XML,
		RuleXml			=	DMNP_RULE_XML,
		Probability		=	DMNP_PROBABILITY,
		MarginalProbability	=	DMNP_MARGINAL_PROBABILITY,
		Caption			=	DMNP_CAPTION,
		Support			=	DMNP_SUPPORT,
		ModelColumnName	=	DMNP_MODEL_COLUMN_NAME,
		Description		=	DMNP_DESCRIPTION,
		Score			=	DMNP_SCORE,
		ShortCaption	=	DMNP_SHORT_CAPTION,
		//Distribution	=	DMNP_DISTRIBUTION,	-- wrapped in a special function
	};

	// wraps dmalgo.h::DM_NODE_FLAGS...
	[System::Diagnostics::CodeAnalysis::SuppressMessage("Microsoft.Naming", "CA1711:IdentifiersShouldNotHaveIncorrectSuffix")]
	public enum class DrillThroughNodeFlags
	{
		Content			=	DMNF_CONTENT_NODE,
		DimensionContent=	DMNF_DIMENSION_CONTENT_NODE,
	};


	public enum class MiningValueType
	{
		PreRenderedString	= -1,
		AutoDetect			= DMMVALUETYPE_AUTODETECT,
		Missing				= DMMVALUETYPE_MISSING,
		Existing			= DMMVALUETYPE_EXISTING,
		Continuous			= DMMVALUETYPE_CONTINUOUS,
		Discrete			= DMMVALUETYPE_DISCRETE,
		Discretized			= DMMVALUETYPE_DISCRETIZED,
		Boolean				= DMMVALUETYPE_BOOLEAN,
		Coefficient			= DMMVALUETYPE_COEFFICIENT,
		ScoreGain			= DMMVALUETYPE_SCOREGAIN,
		[System::Diagnostics::CodeAnalysis::SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")] //[kenkwok] By Design
		RegressorStatistics	= DMMVALUETYPE_STATISTICS,
		NodeUniqueName		= DMMVALUETYPE_NODE_UNIQUE_NAME,
		Intercept			= DMMVALUETYPE_INTERCEPT,
		Other				= DMMVALUETYPE_INTERCEPT + 1,
	};

}
}
}
}
